// 条件判断 extends
// 约束类型参数
type res = 1 extends 2 ? true : false

type isTwo<T> = T extends 2 ? true : false

type res2 = isTwo<1>
type res3 = isTwo<2>


// 类型推导 infer (提取类型的一部分)
type First<Tuple extends unknown[]> = Tuple extends [infer T, ...infer R] ? T : never;
type res4 = First<[1,2,3]>


// 联合 |

type Union = 'a' | 'b' | 'c'

type res5 = Union extends 'a' ? true : false


// 交叉： &
type ObjType = {
  a: number
} & {
  c: boolean
}

const a: ObjType = {
  a: 1,
  c: true
}


// 类型映射
type MyMap<T> = {
  [K in keyof T]: T[K]
}

type res6 = MyMap<ObjType>









